SAP und bunte Bilder – geht das?
SAP ERP kann viel. Kleine Tabellen, große Tabellen ALV Tabellen und im NWBC auch neue PowerListen.
Sobald man Daten jedoch grafisch anzeigen möchte kommt recht schnell Ernüchterung ins Spiel.
Die Prognose bzw. MD04 Diagramme stammen wohl noch aus den frühen 90er Jahren.
Im SAP Demo-Programm GRAPHICS_GUI_CE_DEMO sieht man ein Beispiel mit der Chart-Engine. Der Aufwand diese Diagramme richtig zu formatieren und einzubinden wird oftmals bei knappen Entwicklungsbudgets als erstes zusammengestrichen.
Eine alternative Lösung um unkritische Daten optisch ansprechend zu verpacken ist die Google-Chart API.
Firmendaten an GOOGLE schicken?!? Es ist jedem selbst überlassen welche Daten wirklich übergeben werden.
01.01.2014 – 100
01.02.2014 – 80
01.03.2014 – 70
01.04.2014 – 100
01.05.2014 – 200
Datum + Zahl
Ob das Verkaufsmengen, Einkaufswerte,Anzahl Mitarbeiter oder Umsatz in t€ ist kann man ja bequem über dem Diagramm im HTML ausgeben.
Google versichert zudem die übergebenen Daten nicht zu speichern oder auszuwerten. Wie weit man das glaubt sei wieder jedem selbst überlassen.
Beispiele:



Hier ein konkretes Beispiel Coding zum Nachbauen:
Ziel die MM Bestände der einzelnen Werke als Tortendiagramm darstellen.
Datengrundlage: MM Bestandsstatistik –>S032
Das HTML Coding findet man hier.
HTML Kenntnisse sind sicherlich hilfreich. Es muss jedoch lediglich der rot markierte Bereich angepasst werden.
Coding
REPORT zz_google_chart.
*&---------------------------------------------------------------------*
*& Report ZMM_HTML_TEST
*&
*&---------------------------------------------------------------------*
*& Kleines Testprogramm als Demo für CL_GUI_HTML_VIEWER
*& Dieser Report selektiert alle Bestände aus der Tabellen S032 (MM Statitik) und gibt das Ergebnis als Google Chart aus.
*& M&Mler (AWI) 11/2014
*& Keine Garantie, kein Support, keine Kosten.
*&---------------------------------------------------------------------*
define html.
ls_html = &1. "HTML schreiben
APPEND ls_html TO lt_html. "An HTML Ausgabetabelle hängen
end-OF-DEFINITION.
TABLES: s032.
TYPES: BEGIN OF ty_s032,
werks TYPE werks_d,
wbwbest TYPE wbwbest,
END OF ty_s032.
"Daten
DATA: gt_data TYPE TABLE OF ty_s032.
"Für HTML ausgabe
DATA: lt_html TYPE TABLE OF char255, "hier landet der HTMl Code drin
ls_html LIKE LINE OF lt_html, "eine zeile HTML Code
lo_container TYPE REF TO cl_gui_custom_container, "für die Ausgabe
lo_html_control TYPE REF TO cl_gui_html_viewer, "für die Ausgabe
lf_url(1024),
lf_lines TYPE i, " Anzahl Zeilen
lf_komma(1). "letzter Datensatz darf kein Komma haben
FIELD-SYMBOLS: <fs_data> TYPE ty_s032.
SELECT-OPTIONS: s_werks FOR s032-werks.
START-OF-SELECTION.
"Alle Bestände je Werk aus der S032 summieren
SELECT werks SUM( wbwbest ) AS wbwbest
FROM s032
INTO CORRESPONDING FIELDS OF TABLE gt_data
WHERE werks IN s_werks
AND vrsio = '000'
GROUP BY werks .
"Sodele, itab gt_data ist gefüllt --> Ausgabe als Kuchendiagramm.
"Das folgende Coding füllt den HTML Code in eine interne Tabelle.
"per ABAP macro wird der Code deutlich leserlicher
html `<html>`. "HTML schreiben
html ` <head>`. "HTML schreiben
html ` <script type="text/javascript" src="https://www.google.com/jsapi"></script>`.
html ` <script type="text/javascript">`.
html ` google.load("visualization", "1", {packages:["corechart"]});`.
html ` google.setOnLoadCallback(drawChart);`.
html ` function drawChart() {`.
html ` var data = google.visualization.arrayToDataTable([`.
"Hier kommt der spannende Teil, in dem die "Nutzdaten" gefüllt werden
html ` ['Werk', 'Bestand'],`.
lf_lines = lines( gt_data ).
"jetzt per Loop die itab in JavaScript "umbauen"
"Der letzte Datensatz darf nicht mit Komma abgeschlossen werden, daher lf_komma
lf_komma = ','.
LOOP AT gt_data ASSIGNING <fs_data>.
IF sy-tabix = lf_lines. "letzter Datensatz? Dann kein Komma
FREE: lf_komma.
ENDIF.
ls_html = ` ['` && <fs_data>-werks && `', ` && <fs_data>-wbwbest && `] ` && lf_komma.
append ls_html to lt_html.
ENDLOOP.
html ` ]);`.
html ` var options = {`.
html ` title: 'Hier kann ein Titel eingegeben werden'`.
html ` };`.
html ` var chart = new google.visualization.PieChart(document.getElementById('piechart'));`.
html ` chart.draw(data, options);`.
html ` }`.
html ` </script>`.
html ` </head>`.
"Ab hier kommt der BODY des HTML Dokuments. Wenn man keinen TITLE an die Grafik schickt, kann man dies hier im HTML machen
html ` <body>`.
html ` <div id="piechart" style="width: 900px; height: 500px;"></div>`.
html ` </body>`.
html `</html>`.
CREATE OBJECT lo_html_control
EXPORTING
parent = cl_gui_container=>screen0.
lf_url = 'AWI.html'.
CALL METHOD lo_html_control->load_data
EXPORTING
url = lf_url
IMPORTING
assigned_url = lf_url
CHANGING
data_table = lt_html[].
* HTML im VIEWER anzeigen
lo_html_control->show_url( lf_url ).
write space. "Dummy für SCREEN0
Weitere Hinweise und Anregungen:
– Mit den Geo-Charts kann man nur anhand einer Postleitzahl und eines Wertes schöne Kartendarstellungen erzeugen. Darstellung der Kunden, Lieferanten Verkaufsaktionen usw.
– Die Charts können auch interaktiv “eingestellt” werden. In ABAP kann man die Java-Script Events abfangen. (Wenn ein talentierterer Entwickler als ich es bin mir ein Beispiel zukommen lässt, ergänze ich das gerne in dieser Doku)
12.11.2014 AWI
- Tabellen grafisch darstellen - 31. Januar 2016
- MD04 Start/Freigabedatum anzeigen - 31. Januar 2016
- Eigene Transaktionen – Eigener Ordner im SAP Menü. Ordnung muss sein - 31. Januar 2016




